#include <stdio.h>
#include <pthread.h>
#include <sys/unistd.h>
#include <stdlib.h>

void *callback(void *arg) {
    // 模拟子线程工作
    printf("Child Thread Start Work!\n");
    sleep(1);
    printf("Child Thread End Work!\n");

    return NULL;
}

int main() {
    // 线程退出函数
    // void pthread_exit(void *arg)
    // arg: 线程结束的传出参数

    pthread_t pid;
    pthread_create(&pid, NULL, callback, NULL);

    // 主线程正常退出后, 不会影响子线程的执行
    printf("Main Thread Exit\n");
    pthread_exit(NULL);
    // pthread_exit, exit 和 return 的区别
    // 1.exit 是系统调用, 任何线程半路调用 exit 都会导致进程终止, 表示直接终止了整个进程,
    // 系统会把当前进程所有的资源, 包括内存, io, 线程, 管道, fd 等全部终止使用并且回收, 相当于结束了进程
    // 2.pthread_exit 和 return 都能结束线程, 并且都可以传出参数
    // 3.main 函数的 return 等效于调用的 exit() 函数, 其他函数的return 不会触发 exit() 函数
    // 4.pthread_exit 仅仅只是结束当前线程, 进程地址空间还在, 所有的资源也都在, 其他线程可以正常使用进程地址空间
}